package main

import "fmt"

func changeValue(a int) {
	a = 10
}

// 指针形参  使用指针所指向的内存地址  都是用 *

func changePoint(a *int) {
	*a = 10
}

func main5() {
	a := 11
	changeValue(a)
	fmt.Println(a)
	// 取变量地址用的是  &
	changePoint(&a)
	fmt.Println(a)
	// 函数外部修改值 只能通过指针

	a, b := 100, 200
	swap(&a, &b)
	fmt.Println(a, b)

	// 一级指针
	var p *int
	p = &a
	fmt.Println(p, &a)

	// 二级指针 : 指针的指针
	var pp **int
	pp = &p
	fmt.Println(pp, &p)

	fmt.Println(*pp, p)

	var arr []int = []int{1, 2, 3}
	swapArray(arr, 0, 1)
	for _, item := range arr {
		fmt.Println(item)
	}
}

func swap(a *int, b *int) {
	tmp := *a
	*a = *b
	*b = tmp
}

// 当然 数组本身是指针的集合  不需要通过指针传递在外部修改
func swapArray(a []int, i, j int) {
	a[i], a[j] = a[j], a[i]
}
